﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace QLNSTL
{
    public partial class frmKyLuat : Form
    {
        //mã kỷ luật do không đổi tên.
        int maKyLuat = -1;

        public frmKyLuat()
        {
            InitializeComponent();
        }

        public frmKyLuat(int maKL)
        {
            QLNS_TLDataContext dc = new QLNS_TLDataContext();
            KyLuat kl = dc.KyLuats.SingleOrDefault(k => k.maKyLuat == maKL);
            if (kl != null)
            {
                maKyLuat = maKL;
            }
            InitializeComponent();
        }

        private DataTable KhoiTaoDaTaTable()
        {
            DataTable result = new DataTable();
            result.Columns.Add("MaNV");
            result.Columns.Add("Họ Tên");
            result.Columns.Add("Giới tính");
            result.Columns.Add("Phòng ban");
            result.Columns.Add("Chức vụ");

            return result;
        }

        private DataTable ConvertData(IQueryable<NhanVien> LinqTable)
        {
            DataTable result = KhoiTaoDaTaTable();

            foreach (var r in LinqTable)
            {
                DataRow row = result.NewRow();
                row["MaNV"] = r.maNV;
                row["Họ Tên"] = r.hoTen;
                row["Giới tính"] = (bool)r.gioiTinh ? "Nam" : "Nữ";
                if (r.PhongBan != null)
                {
                    row["Phòng ban"] = r.PhongBan.tenPhongBan;
                }
                if (r.ChucVu != null)
                {
                    row["Chức vụ"] = r.ChucVu.tenChucVu;
                }
                result.Rows.Add(row);
            }
            return result;
        }

        #region tìm kiếm
        private void btTimNhanh_Click(object sender, EventArgs e)
        {
            if (KeySearch.Text.Length > 0)
            {
                QLNS_TLDataContext dataContext = new QLNS_TLDataContext();
                var NVTheoPhong = from c in dataContext.NhanViens
                                  where c.hoTen.Contains(KeySearch.Text)
                                  select c;
                dataGridView1.DataSource = ConvertData(NVTheoPhong);

            }
        }
        #endregion

        private void Load_TextBox(int MaKyLuat)
        {
            QLNS_TLDataContext dc = new QLNS_TLDataContext();
            var kt = dc.KyLuats.SingleOrDefault(kts => kts.maKyLuat == MaKyLuat);
            if (kt != null)
            {
                if (kt.NgayKy != null)
                {
                    dtpNgayKy.Value = (DateTime)kt.NgayKy;
                }
                if (kt.lyDo != null)
                {
                    txtThanhTich.Text = kt.lyDo;
                }
                if (kt.hinhThuc != null)
                {
                    txtHinhThuc.Text = kt.hinhThuc;
                }
            }
        }

        private void Load_dataGridViewDSNVKhenThuong(int maKL)
        {
            QLNS_TLDataContext dc = new QLNS_TLDataContext();
            var DSNVKhenThuongs = from n in dc.Chitietkyluats
                                  where n.maKyLuat == maKL
                                  select new
                                  {
                                      MaNV = n.maNV,
                                      HoTen = n.NhanVien.hoTen,
                                      GioiTinh = n.NhanVien.gioiTinh,
                                      Phong = n.NhanVien.PhongBan.tenPhongBan,
                                      Chuc = n.NhanVien.ChucVu.tenChucVu
                                  };
            DataTable result = KhoiTaoDaTaTable();
            foreach (var r in DSNVKhenThuongs)
            {
                DataRow row = result.NewRow();
                row["MaNV"] = r.MaNV;
                row["Họ Tên"] = r.HoTen;
                row["Giới tính"] = (bool)r.GioiTinh ? "Nam" : "Nữ";
                row["Phòng ban"] = r.Phong;
                row["Chức vụ"] = r.Chuc;

                result.Rows.Add(row);
            }
            dataDSNVKhenThuong.DataSource = result;
            dataDSNVKhenThuong.Columns["MaNV"].Visible = false;
        }

        private void frmKhenThuong_Load(object sender, EventArgs e)
        {
            QLNS_TLDataContext dc = new QLNS_TLDataContext();

            #region dataGridView danh sách tất cả nhân viên
            var TatCaNhanVien = from c in dc.NhanViens
                                select c;
            dataGridView1.DataSource = ConvertData(TatCaNhanVien);
            dataGridView1.Columns["MaNV"].Visible = false;
            #endregion

            if (maKyLuat > 0)
            {
                Load_TextBox(maKyLuat);
                Load_dataGridViewDSNVKhenThuong(maKyLuat);
            }
            else
            {
                dataDSNVKhenThuong.DataSource = KhoiTaoDaTaTable();
            }
        }

        private void btThem_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count < 1)
            {
                MessageBox.Show("Vui lòng chọn một nhân viên.");
                return;
            }
            if (dataGridView1.SelectedRows[0] != null)
            {
                if (dataGridView1.SelectedRows[0].Cells["MaNV"].Value != null)
                {
                    int count = dataDSNVKhenThuong.Rows.Count;
                    for (int i = 0; i < count; i++)
                    {
                        if (dataDSNVKhenThuong.Rows[i].Cells["MaNV"].Value != null)
                        {
                            if (int.Parse(dataDSNVKhenThuong.Rows[i].Cells["MaNV"].Value.ToString()) == int.Parse(dataGridView1.SelectedRows[0].Cells["MaNV"].Value.ToString()))
                            {
                                MessageBox.Show("Nhân viên này đã có trong danh sách khen thưởng.");
                                return;
                            }
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Vui lòng chọn một nhân viên.");
                    return;
                }
            }
            else
            {
                MessageBox.Show("Vui lòng chọn một nhân viên.");
                return;
            }
            var newrow = ((DataTable)dataDSNVKhenThuong.DataSource).NewRow();
            newrow["MaNV"] = dataGridView1.SelectedRows[0].Cells["MaNV"].Value;
            newrow["Họ Tên"] = dataGridView1.SelectedRows[0].Cells["Họ Tên"].Value;
            newrow["Giới tính"] = dataGridView1.SelectedRows[0].Cells["Giới tính"].Value;
            newrow["Phòng ban"] = dataGridView1.SelectedRows[0].Cells["Phòng ban"].Value;
            newrow["Chức vụ"] = dataGridView1.SelectedRows[0].Cells["Chức vụ"].Value;

            ((DataTable)dataDSNVKhenThuong.DataSource).Rows.Add(newrow);
        }

        private void btBot_Click(object sender, EventArgs e)
        {
            if (dataDSNVKhenThuong.SelectedRows.Count < 1)
            {
                MessageBox.Show("Vui lòng chọn một nhân viên.");
                return;
            }
            if (dataDSNVKhenThuong.SelectedRows[0] != null)
            {
                if (dataDSNVKhenThuong.SelectedRows[0].Cells["MaNV"].Value != null)
                {
                    dataDSNVKhenThuong.Rows.Remove(dataDSNVKhenThuong.SelectedRows[0]);
                }
            }
        }

        private bool KiemTraTextBox()
        {
            if (txtHinhThuc.Text.Length < 4 || txtThanhTich.Text.Length < 4)
            {
                return false;
            }
            return true;
        }

        private bool KiemTraGridView()
        {
            for (int i = 0; i < dataDSNVKhenThuong.Rows.Count; i++)
            {
                if (dataDSNVKhenThuong.Rows[i].IsNewRow == false)
                {
                    return true;
                }
            }
            return false;
        }

        private void btDongY_Click(object sender, EventArgs e)
        {
            if (KiemTraTextBox() && KiemTraGridView())
            {
                if (maKyLuat < 1)
                {
                    #region Tạo KyLuat
                    QLNS_TLDataContext dc = new QLNS_TLDataContext();
                    KyLuat kt = new KyLuat();
                    #region maKyLuat
                    int maNVMax = 1;
                    if (dc.KyLuats.Count() > 0)
                    {
                        maNVMax = (from n in dc.KyLuats select n.maKyLuat).Max();
                        maNVMax++;
                    }
                    kt.maKyLuat = maNVMax;
                    #endregion

                    #region thông tin chung
                    kt.hinhThuc = txtHinhThuc.Text;
                    kt.lyDo = txtThanhTich.Text;
                    kt.NgayKy = dtpNgayKy.Value;
                    #endregion

                    dc.KyLuats.InsertOnSubmit(kt);
                    #endregion

                    #region Tạo ChiTietKyLuat
                    for (int i = 0; i < dataDSNVKhenThuong.Rows.Count; i++)
                    {
                        if (dataDSNVKhenThuong.Rows[i].IsNewRow == false)
                        {
                            try
                            {
                                Chitietkyluat ctkl = new Chitietkyluat();
                                ctkl.maKyLuat = kt.maKyLuat;
                                ctkl.maNV = int.Parse(dataDSNVKhenThuong.Rows[i].Cells["MaNV"].Value.ToString());
                                dc.Chitietkyluats.InsertOnSubmit(ctkl);
                                kt.Chitietkyluats.Add(ctkl);
                            }
                            catch (Exception)
                            {
                                MessageBox.Show("Không thêm được chi tiết kỷ luật" + dataDSNVKhenThuong.Rows[i].Cells["MaNV"].Value.ToString());
                            }
                        }
                    }
                    #endregion
                    try
                    {
                        dc.SubmitChanges();
                        MessageBox.Show("Thêm kỷ luật thành công.");
                        this.DialogResult = DialogResult.OK;
                        this.Close();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Không thể thêm kỷ luật.");
                    }
                }
                else
                {
                    #region Tạo KhenThuong
                    QLNS_TLDataContext dc = new QLNS_TLDataContext();
                    KyLuat kt = dc.KyLuats.SingleOrDefault(k => k.maKyLuat == maKyLuat);
                    if (kt == null)
                    {
                        MessageBox.Show("Không thể cập nhật thông tin kỷ luật nhân viên.\n\n Không tìm được kỷ luật cần cập nhật.");
                        return;
                    }

                    #region thông tin chung
                    kt.hinhThuc = txtHinhThuc.Text;
                    kt.lyDo = txtThanhTich.Text;
                    kt.NgayKy = dtpNgayKy.Value;
                    #endregion

                    #endregion

                    #region Xóa các chi tiết khen thưởng cũ
                    var ctktCu = from ct in dc.Chitietkyluats
                                 where ct.maKyLuat == maKyLuat
                                 select ct;
                    dc.Chitietkyluats.DeleteAllOnSubmit(ctktCu);
                    #endregion
                    #region
                    for (int i = 0; i < dataDSNVKhenThuong.Rows.Count; i++)
                    {
                        if (dataDSNVKhenThuong.Rows[i].IsNewRow == false)
                        {
                            try
                            {
                                Chitietkyluat ctkt = new Chitietkyluat();
                                ctkt.maKyLuat = kt.maKyLuat;
                                ctkt.maNV = int.Parse(dataDSNVKhenThuong.Rows[i].Cells["MaNV"].Value.ToString());
                                dc.Chitietkyluats.InsertOnSubmit(ctkt);
                                kt.Chitietkyluats.Add(ctkt);
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show("Không thêm được chi tiết khen thưởng" + dataDSNVKhenThuong.Rows[i].Cells["MaNV"].Value.ToString() + "\n\n" + ex.Message);
                            }
                        }
                    }
                    #endregion
                    try
                    {
                        dc.SubmitChanges();
                        MessageBox.Show("Thay đổi thông tin thành công");
                        this.DialogResult = DialogResult.OK;
                        this.Close();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Không thể chỉnh sửa thông tin khen thưởng.");
                    }
                }
            }
        }
    }
}
